﻿Imports System.IO
Public Class Fichero
    Private _Usuarios As New List(Of Usuario)
    Private nombreFichero As String = "usuarios.txt"
    Public Event ErrorFichero(ByVal sender As Object, ByVal e As MensajeErrorEventArgs) ' Definir 
    Public ReadOnly Property Usuarios As ObjectModel.ReadOnlyCollection(Of Usuario)
        Get
            Return _Usuarios.AsReadOnly
        End Get
    End Property

            ''' <summary>
            ''' Subprograma que se dedica a añadir los datos de los jugadores a la lista
            ''' </summary>
            ''' <param name="nombre"></param>
            ''' <param name="apellido"></param>
            ''' <param name="puntuacion"></param>
            ''' <remarks></remarks>
    Public Sub AñadirPersona(ByVal nombre As String, ByVal apellido As String, ByVal puntuacion As Integer)
        Dim persona As New Usuario
        persona.nombre = nombre
        persona.apellido = apellido
        persona.puntuacion = puntuacion

        If _Usuarios.Contains(persona) Then
            Dim pos As Integer
            pos = _Usuarios.IndexOf(persona) 'Esta parte sirve para que podamos encontrar la posicion del usuario al que le vamos a cambiar la posicion
            _Usuarios(pos).puntuacion = persona.puntuacion 'Esto lo unico que hara sera cambiar la puntuacion del usuario
        Else
            _Usuarios.Add(persona) 'Esto lo que hara sera añadir un usuario entero nuevo
        End If
    End Sub
    ''' <summary>
    ''' Subprograma que se dedica a guardar los datos en un fichero
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub GuardarEnFichero()
        Dim escribir As StreamWriter
        Try
            escribir = New StreamWriter(My.Application.Info.DirectoryPath & nombreFichero, False)
            For Each persona As Usuario In _Usuarios
                escribir.WriteLine(persona.nombre & "\" & persona.apellido & "\" & persona.puntuacion)
            Next
            'For i As Integer = 0 To _Usuarios.Count - 1
            '    escribir.WriteLine(_Usuarios(i).nombre & "\" & _Usuarios(i).apellido & "\" & _Usuarios(i).puntuacion)
            'Next
            escribir.Close()
        Catch ex As Exception
            Dim mensaje As New MensajeErrorEventArgs
            RaiseEvent ErrorFichero(Me, mensaje)
        End Try
    End Sub
    ''' <summary>
    ''' Este sub programa lo que hace es añadir a la lista usuarios que ya habian jugado antes a este juego
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()
        Dim linea As String
        Dim textos As New List(Of String)
        Dim usuario As Usuario
        Dim fic As String = nombreFichero
        Try
            Dim sr As New StreamReader(fic, System.Text.Encoding.Default)
            While (Not sr.EndOfStream) 'Esto es para que no solo lea una linea
                linea = sr.ReadLine() 'Esto sirve para poder leer cada linea del fichero
                Dim datos() As String = Split(linea, "\")
                usuario = New Usuario
                usuario.nombre = datos(1)
                usuario.apellido = datos(2)
                usuario.puntuacion = datos(3)
                _Usuarios.Add(usuario)
            End While
            sr.Close()
        Catch ex As Exception
            Dim mensaje As New MensajeErrorEventArgs
            RaiseEvent ErrorFichero(Me, mensaje)
        End Try
    End Sub
    Public Sub Ordenar()
        _Usuarios.Sort(AddressOf Comparando)
    End Sub
    Private Function Comparando(ByVal usu1 As Usuario, ByVal usu2 As Usuario) As Boolean
        Return usu2.puntuacion >= usu1.puntuacion
    End Function
End Class
